package com.qqtech.qquan.user.dao;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.qqtech.core.frame.dao.BaseDao;
import com.qqtech.qquan.user.model.UserValue;
import com.qqtech.qquan.user.model.UserValueQuery;
import com.qqtech.qquan.user.model.UserValueVo;

import java.util.List;

public interface UserValueDao extends BaseDao<UserValue> {
	public int updateMinusDrawCount(Integer id);

	public int updateDrawCount(Integer id);

	public int queryCountByDistance(UserValue query);

	/**
	 * 按距离查询-附近的人
	 * 
	 * @param query
	 * @param pageable
	 * @return
	 */
	public Page<UserValueVo> queryPageListByDistance(UserValue query, Pageable pageable);

	/**
	 * 变更某用户的产值(money)
	 * 
	 * @param userId
	 *            用户id
	 * @param alterValue
	 *            变更的值
	 */
	public void alterMoney(int userId, int alterValue);
	/**
	 * 按社区查询-数量
	 * 
	 * @param communityId
	 *            社区id
	 * @return 
	 */
	public int queryCountUserInfo(UserValueQuery query);
	/**
	 * 按社区查询-荣誉榜
	 * 
	 * @param communityId
	 *            社区id
	 * @return 
	 */
	public Page<UserValueVo> queryUserInfo(UserValueQuery query, Pageable pageable);

	/**
	 * 变更某用户的推送设备信息
	 * 
	 * @param userId
	 * @param registrationId
	 */
	public void alterRegistrationId(int userId, String registrationId);

	/**
	 * 变更某用户的赠送产值(money)
	 * 
	 * @param userId
	 *            用户id
	 * @param alterQuanValue
	 *            变更赠送的值
	 */
	public void alterQuanValue(int userId, int alterQuanValue);

	/**
	 * 变更某用户的荣誉值(honorValue)
	 * 
	 * @param userId
	 *            用户id
	 * @param alterHonorValue
	 *            变更荣誉的值
	 * @param honorLevel 用户荣誉等级
	 * @param honorLevelName 用户荣誉等级名称    
	 */
	public void alterHonorValue(int userId, int alterHonorValue, Integer honorLevel, String honorLevelName);


	/**
	 * 按社区查询-发帖达人

	 * @param
	 * @return
	 */
	public Page<UserValueVo> queryUserInfoByTalent(UserValueQuery query, Pageable pageable);


	List<UserValueVo> queryUserInfoByUserIds(UserValueQuery query);

}
